package com.smedi.ismedi.file.core.application.service;

import com.smedi.ismedi.file.core.domain.aggregatemodel.FileInfo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @Author Jimmy
 * @Date 2021/6/1 18:07
 */
public interface FileApplicationService {
    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    FileInfo fileUpLoad(MultipartFile file);

    /**
     * 上传File形式的文件
     *
     * @param file
     * @return
     */
    FileInfo fileUpLoad(File file);

    /**
     * 删除文件确认
     *
     * @param signKey
     * @return
     */
    boolean uploadFileConfirm(String signKey);

    /**
     * 查询文件信息
     *
     * @param signKey
     * @return
     */
    FileInfo getFileInfo(String signKey);

    /**
     * 查询文件信息
     *
     * @param signKeys
     * @return
     */
    List<FileInfo> getFileInfo(List<String> signKeys);

    /**
     * 删除文件
     *
     * @param signKey
     * @param reason
     * @return
     */
    boolean deleteFileBySignKey(String signKey, String reason);

    /**
     * 根据文件签名下载文件
     *
     * @param signKey
     * @param response
     * @return
     */
    boolean downloadFileBySignKey(String signKey, HttpServletResponse response);

    /**
     * 根据文件签名下载文件
     *
     * @param signKey
     * @return
     */
    byte[] downloadFileBySignKey(String signKey) throws IOException;

    /**
     * 文件下载
     *
     * @param fileName
     * @param fileGroup
     * @param fileRemoteName
     * @param response
     */
    void downloadFile(String fileName, String fileGroup, String fileRemoteName, HttpServletResponse response);

    /**
     * 文件下载
     *
     * @param fileName
     * @param fileGroup
     * @param fileRemoteName
     */
    byte[] downloadFile(String fileName, String fileGroup, String fileRemoteName) throws IOException;

    /**
     * 用OpenOffice文件转换
     *
     * @param file 需要转换的文件
     * @return byte[]
     */
    byte[] convertFileToPdfByOpenOffice(MultipartFile file) throws IOException;


    byte[] zipBySignKeys(List<String> signKeys) throws IOException;

    FileInfo pdfMerge(List<String> signKeys) throws IOException;
}